"""
数据初始化脚本
用于快速创建测试数据

使用方法:
python manage.py shell
>>> exec(open('init_data.py').read())
"""

from django.contrib.auth.models import User
from api_examples.models import Category, Product, Review, Tag, ProductTag

# 创建用户
print("创建用户...")
admin_user, created = User.objects.get_or_create(
    username='admin',
    defaults={
        'email': 'admin@example.com',
        'first_name': 'Admin',
        'last_name': 'User',
        'is_staff': True,
        'is_superuser': True,
    }
)
if created:
    admin_user.set_password('admin123')
    admin_user.save()
    print(f"✓ 创建管理员用户: {admin_user.username}")
else:
    print(f"✓ 管理员用户已存在: {admin_user.username}")

test_user, created = User.objects.get_or_create(
    username='testuser',
    defaults={
        'email': 'test@example.com',
        'first_name': 'Test',
        'last_name': 'User',
    }
)
if created:
    test_user.set_password('test123')
    test_user.save()
    print(f"✓ 创建测试用户: {test_user.username}")
else:
    print(f"✓ 测试用户已存在: {test_user.username}")

# 创建分类
print("\n创建分类...")
categories_data = [
    {'name': '电子产品', 'description': '手机、电脑、平板等电子设备'},
    {'name': '服装鞋帽', 'description': '各类服装、鞋子、帽子等'},
    {'name': '家居用品', 'description': '家具、装饰品、生活用品等'},
    {'name': '图书音像', 'description': '图书、音乐、电影等'},
    {'name': '运动户外', 'description': '运动器材、户外用品等'},
]

categories = {}
for cat_data in categories_data:
    category, created = Category.objects.get_or_create(
        name=cat_data['name'],
        defaults={'description': cat_data['description']}
    )
    categories[cat_data['name']] = category
    if created:
        print(f"✓ 创建分类: {category.name}")
    else:
        print(f"✓ 分类已存在: {category.name}")

# 创建产品
print("\n创建产品...")
products_data = [
    {
        'name': 'iPhone 14 Pro',
        'description': '苹果最新旗舰手机，搭载A16仿生芯片，支持灵动岛设计',
        'price': 7999.00,
        'category': '电子产品',
        'status': 'active',
        'stock': 50,
        'created_by': admin_user,
    },
    {
        'name': 'MacBook Pro M2',
        'description': '搭载M2芯片的专业级笔记本电脑，性能强劲',
        'price': 12999.00,
        'category': '电子产品',
        'status': 'active',
        'stock': 30,
        'created_by': admin_user,
    },
    {
        'name': '耐克运动鞋',
        'description': '舒适透气的运动鞋，适合跑步和健身',
        'price': 599.00,
        'category': '服装鞋帽',
        'status': 'active',
        'stock': 100,
        'created_by': test_user,
    },
    {
        'name': '宜家书桌',
        'description': '简约现代风格书桌，适合办公和学习',
        'price': 299.00,
        'category': '家居用品',
        'status': 'active',
        'stock': 25,
        'created_by': test_user,
    },
    {
        'name': 'Python编程指南',
        'description': '从入门到精通的Python编程教程',
        'price': 89.00,
        'category': '图书音像',
        'status': 'active',
        'stock': 200,
        'created_by': admin_user,
    },
    {
        'name': '游戏手柄',
        'description': '无线游戏手柄，兼容多种设备',
        'price': 199.00,
        'category': '电子产品',
        'status': 'draft',
        'stock': 0,
        'created_by': test_user,
    },
]

products = []
for prod_data in products_data:
    category = categories[prod_data['category']]
    product, created = Product.objects.get_or_create(
        name=prod_data['name'],
        defaults={
            'description': prod_data['description'],
            'price': prod_data['price'],
            'category': category,
            'status': prod_data['status'],
            'stock': prod_data['stock'],
            'created_by': prod_data['created_by'],
        }
    )
    products.append(product)
    if created:
        print(f"✓ 创建产品: {product.name}")
    else:
        print(f"✓ 产品已存在: {product.name}")

# 创建标签
print("\n创建标签...")
tags_data = [
    {'name': '热销', 'color': '#ff4444'},
    {'name': '新品', 'color': '#44ff44'},
    {'name': '限量', 'color': '#4444ff'},
    {'name': '推荐', 'color': '#ffaa00'},
    {'name': '包邮', 'color': '#aa00ff'},
]

tags = {}
for tag_data in tags_data:
    tag, created = Tag.objects.get_or_create(
        name=tag_data['name'],
        defaults={'color': tag_data['color']}
    )
    tags[tag_data['name']] = tag
    if created:
        print(f"✓ 创建标签: {tag.name}")
    else:
        print(f"✓ 标签已存在: {tag.name}")

# 为产品添加标签
print("\n为产品添加标签...")
product_tags_data = [
    {'product': 'iPhone 14 Pro', 'tags': ['热销', '新品']},
    {'product': 'MacBook Pro M2', 'tags': ['推荐', '新品']},
    {'product': '耐克运动鞋', 'tags': ['热销', '包邮']},
    {'product': '宜家书桌', 'tags': ['推荐', '包邮']},
    {'product': 'Python编程指南', 'tags': ['热销', '推荐']},
]

for item in product_tags_data:
    product = next((p for p in products if p.name == item['product']), None)
    if product:
        for tag_name in item['tags']:
            tag = tags[tag_name]
            product_tag, created = ProductTag.objects.get_or_create(
                product=product,
                tag=tag,
                defaults={'added_by': admin_user}
            )
            if created:
                print(f"✓ 为产品 {product.name} 添加标签 {tag.name}")

# 创建评论
print("\n创建评论...")
reviews_data = [
    {
        'product': 'iPhone 14 Pro',
        'reviewer': test_user,
        'rating': 5,
        'comment': '非常好的手机，性能强劲，拍照效果很棒！'
    },
    {
        'product': 'iPhone 14 Pro',
        'reviewer': admin_user,
        'rating': 4,
        'comment': '整体不错，就是价格有点贵。'
    },
    {
        'product': 'MacBook Pro M2',
        'reviewer': test_user,
        'rating': 5,
        'comment': 'M2芯片真的很快，编程开发体验很好。'
    },
    {
        'product': '耐克运动鞋',
        'reviewer': admin_user,
        'rating': 4,
        'comment': '穿着舒适，质量不错，值得购买。'
    },
    {
        'product': 'Python编程指南',
        'reviewer': test_user,
        'rating': 5,
        'comment': '内容详细，例子丰富，很适合初学者。'
    },
]

for review_data in reviews_data:
    product = next((p for p in products if p.name == review_data['product']), None)
    if product:
        review, created = Review.objects.get_or_create(
            product=product,
            reviewer=review_data['reviewer'],
            defaults={
                'rating': review_data['rating'],
                'comment': review_data['comment']
            }
        )
        if created:
            print(f"✓ 创建评论: {review_data['reviewer'].username} -> {product.name}")

print("\n🎉 数据初始化完成！")
print("\n📊 统计信息:")
print(f"用户数量: {User.objects.count()}")
print(f"分类数量: {Category.objects.count()}")
print(f"产品数量: {Product.objects.count()}")
print(f"标签数量: {Tag.objects.count()}")
print(f"产品标签关联: {ProductTag.objects.count()}")
print(f"评论数量: {Review.objects.count()}")

print("\n🔑 登录信息:")
print("管理员: admin / admin123")
print("测试用户: testuser / test123")

print("\n🌐 API端点测试:")
print("http://127.0.0.1:8000/api/categories/basic/")
print("http://127.0.0.1:8000/api/products/generic/")
print("http://127.0.0.1:8000/api/v1/products/")
print("http://127.0.0.1:8000/admin/")
print("http://127.0.0.1:8000/docs/")
